package itheima04;
/*

import org.junit.Test;


*/
/*
    类加载器
        1.作用: 类加载器：类加载器是负责加载类的对象。将class文件（硬盘）加载到内存生成Class对象。
        2.继承体系:
            AppClassLoader extends ExtClassLoader extends BootstrapClassLoader extends ClassLoader
        3.获取类加载器
            java.lang.Class类 成员方法
            public ClassLoader getClassLoader(): 返回该类的类加载器。
        4.获取父类加载器
            java.lang.ClassLoader类 成员方法
            public final ClassLoader getParent(): 返回委托的父类加载器。
 */

import org.junit.Test;


public class Demo07ClassLoader {
    @Test
    public void method() {
        //获取AppClassLoader，
        ClassLoader app = Demo07ClassLoader.class.getClassLoader();
        System.out.println(app);//sun.misc.Launcher$AppClassLoader@18b4aac2

        //获取ExtClassLoader，获取父类加载器
        ClassLoader ext = app.getParent();
        System.out.println(ext);//sun.misc.Launcher$ExtClassLoader@452b3a41

        //BootstrapClassLoader引导类加载器获取不了，属于底层
        ClassLoader boot = ext.getParent();
        System.out.println(boot);//null
    }

   @Test
    public void app() {
        //获取AppClassLoader
        ClassLoader app = Demo07ClassLoader.class.getClassLoader();
        System.out.println(app);//sun.misc.Launcher$AppClassLoader@18b4aac2
    }

    @Test
    public void ext() {
        //直接获取ExtClassLoader
        ClassLoader ext = Demo07ClassLoader.class.getClassLoader().getParent();
        System.out.println(ext);//sun.misc.Launcher$ExtClassLoader@452b3a41
    }

    @Test
    public void boot() {
        //直接获取BootstrapClassLoader
        ClassLoader boot = String.class.getClassLoader();
        System.out.println(boot);//null
    }
}

/*

public class Demo07ClassLoader {
    @Test
    public  void  method(){
      //获取类加载器
      ClassLoader classLoader=Demo07ClassLoader.class.getClassLoader();
      //jdk.internal.loader.ClassLoaders$AppClassLoader@2437c6dc
      System.out.println(classLoader);
      //获取父类加载器
      ClassLoader classLoader1=classLoader.getParent();
       // jdk.internal.loader.ClassLoaders$PlatformClassLoader@43738a82
       System.out.println(classLoader1);
       //BootstrapClassLoader为C和C++写的，获取不到null
       ClassLoader classLoader2=classLoader1.getParent();
        System.out.println(classLoader2);
    }

    @Test
    public  void  method01(){
        //jdk.internal.loader.ClassLoaders$PlatformClassLoader@43738a82
        ClassLoader c1 = Demo07ClassLoader.class.getClassLoader().getParent();
        System.out.println(c1);
    }
}*/
